// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLLimit;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "MySqlStatementImpl.h"
#include "MySqlShowStatement.h"

class MySqlShowProfileStatement_Type
{
public:
  static MySqlShowProfileStatement_Type_ptr ALL;
  static MySqlShowProfileStatement_Type_ptr BLOCK_IO;
  static MySqlShowProfileStatement_Type_ptr CONTEXT_SWITCHES;
  static MySqlShowProfileStatement_Type_ptr CPU;
  static MySqlShowProfileStatement_Type_ptr IPC;
  static MySqlShowProfileStatement_Type_ptr MEMORY;
  static MySqlShowProfileStatement_Type_ptr PAGE_FAULTS;
  static MySqlShowProfileStatement_Type_ptr SOURCE;
  static MySqlShowProfileStatement_Type_ptr SWAPS;

  string_ptr name;
  uint64_t mask;

  MySqlShowProfileStatement_Type(uint64_t mask, string_ptr name);
};

class MySqlShowProfileStatement : virtual public MySqlStatementImpl, virtual public MySqlShowStatement
{
public:
  MySqlShowProfileStatement_Type_list_ptr types;
  SQLExpr_ptr forQuery;

  SQLLimit_ptr limit;

  MySqlShowProfileStatement();
  SHAREDOBJECT(MySqlShowProfileStatement);
  void accept0(MySqlASTVisitor_ptr visitor);

  MySqlShowProfileStatement_Type_list_ptr getTypes();

  SQLExpr_ptr getForQuery();

  void setForQuery(SQLExpr_ptr forQuery);

  SQLLimit_ptr getLimit();

  void setLimit(SQLLimit_ptr limit);
};
